//导入操作 token 的方法
import { getToken, setToken, removeToken,setTokenTime } from '@/utils/auth'
//导入登陆的方法
import { loginApi, getInfoApi, getUserInfoApi } from '@/api/user'

// 状态
const state = {
  //用户登陆之后的标识
  token: getToken(),
  // 保存用户信息
  userInfo: {}
}
//修改状态
const mutations = {
  setUserInfo (state, userInfo) {
    state.userInfo = userInfo
  },
  //删除 userInfo
  removeUserInfo (state) {
    state.userInfo = {}
  },
  //设置token (登陆成功)
  setToken (state, token) {
    //保存token
    state.token = token
    setToken(token) //vuex和缓存数据的同步
  },
  // 删除token(退出登录)
  removeToken (state) {
    state.token = null//删除vuex的token
    //删除本地 cookie中删除
    removeToken()//先清除vuex 再清除缓存vuex和缓存数据的同步
  }
}
//执行异步
const actions = {
  //获取用户信息
  async getUserInfo ({ commit }) {
    //调用获取用户信息的接口
    const res = await getInfoApi()
    //得到员工的基本信息
    const result = await getUserInfoApi(res.userId)
    // console.log('用户基本信息', res)
    // console.log('员工基本信息', result)
    //将用户基本资料&员工基本信息全部保存到 userInfo 中
    const baseResult = { ...res, ...result }
    //保存用户信息
    commit('setUserInfo', baseResult)
    //返回用户信息:(埋)
    return baseResult
  },
  //登陆的方法
  async login ({ commit }, data) {
    //调用登录的接口
    const baseResult = await loginApi(data)
    console.log('调用登陆的接口', baseResult)
    //actions修改state必须通过mutations
    //经过响应拦截器的处理之后, 这里的baseResult实际上就是token
    commit('setToken', baseResult)
    //写入时间戳
    setTokenTime()//将当前的最新时间写入缓存
  },
  //登出的action
  logout (context) {
    //删除token
    context.commit('removeToken') //不仅仅删除了vuex中的 还删除除了缓存中的
    //删除用户资料
    context.commit('removeUserInfo') //删除用户信息
  }
  //完成token超时的主动介入
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
